import axios from "axios"
import {ElMessage} from "element-plus"

/**
 * 创建axios实例
 * 配置基础URL和请求超时时间
 */
const request = axios.create({
    baseURL: "http://localhost:8081/api",
    timeout: 5000,
})

/**
 * 请求拦截器
 * 在发送请求之前对请求进行处理
 * 主要功能是添加认证token到请求头
 */
request.interceptors.request.use(
    (config) => {
        const token = sessionStorage.getItem("token")
        if (token) {
            config.headers['token'] = `${token}`
        }
        return config
    },
    (error) => {
        return Promise.reject(error)
    },
)

/**
 * 响应拦截器
 * 对服务器返回的响应进行统一处理
 * 包括状态码检查、错误提示和权限验证
 */
request.interceptors.response.use(
    (response) => {
        // 解构响应数据中的code、message和data字段
        const {code, message, data} = response.data

        // 如果响应状态码为200，表示请求成功
        if (code === 200) {
            // 直接返回数据部分
            return data
        } else if (code === 501) {
            setTimeout(() => {
                sessionStorage.removeItem("token")
                window.location.href = "/login"
            }, 3000)
        } else {
            ElMessage.error(message)
            return Promise.reject(new Error(message || "请求失败"))
        }
    },
    (error) => {
        // 处理401未授权错误，清除token并跳转到登录页
        if (error.response?.status === 401) {
            sessionStorage.removeItem("token")
            window.location.href = "/login"
        }
        ElMessage.error(error.message || "网络错误")
        return Promise.reject(error)
    },
)

export default request
